package test01;

import org.w3c.dom.*;
import test02.XmlUtils;

public class lianxi {
    public static void main(String[] args) {
        // 调用自定义工具类 DomUtil 获取 Document 对象（即解析后的 XML 文档对象）
        // 参数是 XML 文件的路径（相对路径或绝对路径）
        Document document = XmlUtils.getDocumentInstance("worker.xml");

        // 再次获取根标签，并打印其标签名（更有意义）
        Element root = document.getDocumentElement();
        System.out.println("根标签: " + root.getTagName());

        // 获取根标签下的所有子节点（包括文本节点、元素节点、CDATA、注释等）
        NodeList childNodes = root.getChildNodes();

        // 遍历所有子节点
        for (int i = 0; i < childNodes.getLength(); i++) {
            Node node = childNodes.item(i); // 获取第 i 个子节点
            System.out.println("*************************************************");
            System.out.println(node.getNodeType());
            System.out.println("*************************************************");

            // 如果当前节点是元素节点（如 <id>、<name>）
            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Element elem = (Element) node; // 类型转换为 Element
                // 获取标签名，例如 "id"、"name"，并打印
                System.out.println("标签名: " + elem.getTagName());
                // 获取该标签内的文本内容，并打印
                System.out.println("标签内容: " + elem.getTextContent().trim());
                System.out.println("*************************************************");
            }

            // 如果当前节点是 CDATA 区段（如 <![CDATA[ ... ]]>）
            if (node.getNodeType() == Node.CDATA_SECTION_NODE) {
                CDATASection cdata = (CDATASection) node; // 转为 CDATASection 类型
                // 打印 CDATA 中的原始文本内容（不被解析）
                System.out.println("CDATA 内容: " + cdata.getData().trim());
                System.out.println("*************************************************");
            }

            // 如果当前节点是注释节点（如 <!-- this is comment -->）
            if (node.getNodeType() == Node.COMMENT_NODE) {
                Comment comment = (Comment) node; // 转为 Comment 类型
                // 打印注释内容
                System.out.println("注释内容: " + comment.getData().trim());
                System.out.println("*************************************************");
            }


        }
    }
}
